版权说明:本文为原创文章,未经允许,不得转载。
类目 (Category)
1.基本概念
当需要在一个已封装的类中添加方法时,可以不在该类中做修改或定义一个子类,只需在用到该方法时,添加一个该类的类目(category)即可。
· 在类目中定义的方法,会成为原始类的一部分,与其他方法的调用没有区别。
· 通过给父类定义类目方法,其子类也会继承这些方法。
2.类目的应用
· 对现有的类进行扩展。
· 作为子类的替代手段:不需要定义和使用一个子类,可以通过类目向已有的类里增加方法。
· 对类中的方法归类:利用category把一个庞大的类划分成小块来分别进行开发,从而更好的对类中的方法进行更新和维护。
3.类目的局限性
· 无法向类目中添加新的实例变量,类目没有位置来容纳实例变量,如果想增加类的实例变量,只能通过子类的方式。
· 若在类目中覆盖现有的类的方法,会引起super消息的断裂,因为类目中的方法具有更高的优先级,因此,一般不要覆盖现有类中的方法。
4.类目的定义及使用
类目的命名规则为:需添加类目的类名(类目名)
类目的接口声明与类的定义十分相似,但类目不继承父类,只需要带有一个括号,表示该类目的主要用途。
例如,如果需要对NSString类添加一个类目 Revert,则,文件名为:
NSString+Revert.h
NSString+Revert.m
代码分别为:
NSString+Revert.h:
@interface NSString (Revert)
- (void) test;
@end
NSString+Revert.m:
@implementation NSString (Revert)
- (void) test{
//code
}
@end
延展 (Extension)
1.延展的基本概念
有时,一个类的某个方法只需要自己可见,可以通过延展的方法定义类的私有方法。类的延展就如同“匿名”的类目,延展中声明的方法在类本身的@implementation和它对应的@end之间实现。
2.延展的使用
延展的声明和实现均写在类的 .m 文件中,如下代码所示:
· 延展的声明
@interence Person ()
- (void)setName;
@end
· 延展的实现
@implementation Person
- (void)private{
//code
}
@end